<script type="text/javascript">
$(function(){
	var pg = App.office.meetingIndex.ui, pp = pg.params = {},
		left = pg.children('.left'), right = pg.children('.right'),
		main = pg.children('.main'), lhd = left.children('.head'),
		lbd = left.children('.body'), lft = left.children('.foot'),
		rhd = right.children('.head'), rbd = right.children('.body'),
		days = lbd.children('.days'),
		minDate = 0, maxDate = 0, _meeting, DH = 32;
	
	rbd.scroll(function() {
		var s = this.scrollTop;
		lbd.scrollTop(s);
		main.children('.lane').children('.body').scrollTop(s);
	});
	pg.mousewheel(function(e, delta, deltaX, deltaY) {
		var s = rbd[0].scrollTop - deltaY * 8;
		lbd.scrollTop(s);
		rbd[0].scrollTop = s;
		main.children('.lane').children('.body').scrollTop(s);
		return false;
	});

// 	function rgb(){//rgb颜色随机
// 		var r = Math.floor(Math.random()*256);
// 		var g = Math.floor(Math.random()*256);
// 		var b = Math.floor(Math.random()*256);
// 		var rgb = '('+r+','+g+','+b+')';
// 		return rgb;
// 	}
	//十六进制随机浅色
	function color16(){
		var r = Math.floor(128 + Math.random() * 128);
		var g = Math.floor(128 + Math.random() * 128);
		var b = Math.floor(128 + Math.random() * 128);
		return '#' + r.toString(16) + g.toString(16) + b.toString(16);
	}

	function adjust(){
		var h = pg.parent().height(),
			a = main.children('.lane').children('.body');
		pg.height(h);
		main.height(h).width(pg.width() - 128 - 18);
		left.height(h);
		right.height(h);
		h = h - 30 - 16;
		a.height(h);
		lbd.height(h);
		rbd.height(h);
		h = days.height();
		rbd.children().height(h);
		// 更新所有lane body内撑杆的高度
		a.children('.bar').height(h);
	}
	$(window).resize(adjust);
	adjust();

	function calcTop(a, b){
		return (Math.floor(a/86400000)  - Math.floor(b/86400000)) * 32;
	}
	function yyyyMMdd(d){
		return new Date(d).format('yyyy-MM-dd');
	}
	function day(d, t, st, et) {
		var z = yyyyMMdd(d);
		var a = $('<div class="day"></div>'),
			x = $('<div class="text"></div>');
		a.attr('name', z).addClass('type' + Cache.office.work.days[z]);
		if (!t) {
			a.addClass('out');
			x.append(z);
			a.append(x);
			//a.append(z);
			return a;
		}
		x.append(t.title);
		a.append(x);
		return a;
	}
	function init(lt){
		main.empty();
		// 遍历所有会议
		$.each(lt, function(i, meeting){
			// 取出当前会议的用户ID，XX日期
			var tid = meeting.id, oid = meeting.ownerId;
			// 查找当前用户的泳道是否存在
			var ul = main.seek(oid), lb;//user lane
			// 不存在则先创建
			if (!ul.length) {
				ul = $('<div class="lane"></div>');
				ul.attr('name', oid);
				var h = $('<div class="head"></div>');
				h.append(meeting.owner.name);
				ul.append(h);
				lb = $('<div class="body"></div>')
					.append('<div class="bar"></div>')
					.appendTo(ul);
				main.append(ul);
			} else {
				lb = ul.children('.body');
			}
			// 查找当前用户的泳道中是否存在该会议的列
			var tc = lb.seek(tid);//meeting column
			// 不存在则先创建
			if (!tc.length) {
				tc = $('<div class="meeting"></div>');
				tc.attr('name', tid).attr('title', meeting.title);
				tc.dblclick(function(){
					App.open({
						title: '编辑会议',
						ctx: 'office',
						action:'meetingEdit',
						model: true,
						params: meeting
					}, function(){
						load();
					});
				});
				tc.css('background-color', color16());
				//
				lb.append(tc);
			}
			// 找出当前会议的最小和最大日期，并与当前最小日期计算差值
			var st = meeting.startTime, et = meeting.endTime;
			st = new Date(st).getTime();
			et = new Date(et).getTime();
			// 看当前用户泳道内是否有同日期的会议
			if (lb.seek(yyyyMMdd(st)).length) {
				// 如果有，说明会议需要并行
				tc.css('float', 'left');
			}
			// 存储当前会议的最小日期
			tc.data('min', st);
			// 如果当前会议的最小日期小于当前全局最小日期，则需要在顶部补空行
			if (st < minDate) {
				// 在所有用户泳道（除当前用户）中的所有会议列顶部插入日期
				main.find('.meeting').each(function(i, n){
					var a = $(n);
					if (a.attr('name') == oid) {
						return;
					}
					a.css('top', calcTop(st, a.data('min')));
				});
				// 同时在最左侧日期列插入日期
				for (var i = minDate; i >= st; i -= 86400000) {
					days.seek(yyyyMMdd(i)).remove()
					days.prepend(day(i));
				}
				//更新全局最小日期
				minDate = st;
			} else {
				// 如果没有minDate就把当前会议的开始时间作为最小日期
				if (!minDate) {
					minDate = st;
					//在最左侧日期列插入日期
					days.seek(yyyyMMdd(st)).remove()
					days.prepend(day(st));
				}
				// 反之在当前会议列顶部补日期
				tc.css('top', calcTop(st, minDate));
			}
			for (var i = st; i <= et; i += 86400000) {
				// 在当前会议列添加日期
				tc.append(day(i, meeting, st, et));
			}
			// 如果会议最大日期大于全局最大日期
			maxDate = Math.max(maxDate, minDate + 86400000);
			if (et > maxDate) {
				// 则需要补最左侧的日期列
				var m = yyyyMMdd(maxDate);
				days.seek(m).remove();
				for (var i = maxDate; i <= et; i += 86400000) {
					// 更新日期列，并避免重复
					days.seek(yyyyMMdd(i)).remove()
					days.append(day(i));
				}
				maxDate = et;
			}
		});
		adjust();
	}

	function load(){
		var w = mac.wait('Loading');
		$.post(App.office.ctx + '/meeting/index.do', {
			pageNo: 1,
			pageSize: 10000,
			groupId: pp.groupId
		}, function(rs) {
			var ro = mac.eval(rs);
			if (ro.success) {
				init(ro.data.list);
			} else {
				mac.alert(ro.data, ro.params);
			}
			w.close();
		});
	}
	load();

	lhd.children('.add').click(function(){
		App.open({
			title: '添加会议',
			ctx: 'office',
			action:'meetingEdit',
			model: true
		}, function(){
			load();
		});
	});
	rhd.children('.groups').click(function(){
		App.open({
			title: '选择工作组',
			ctx: 'office',
			action: 'groupPicker',
			model: true,
			params: { multi: false }
		}, function(s){
			pp.groupId = s[0].id;
			load();
		});
	});
});
</script>
<div class="left">
	<div class="head">
		<div class="add">添加会议</div>
	</div>
	<div class="body">
		<div class="days"></div>
	</div>
	<div class="foot">
		<div class="days"></div>
	</div>
</div>
<div class="main">
</div>
<div class="right">
	<div class="head">
		<div class="groups">&nbsp;</div>
	</div>
	<div class="body">
		<div></div>
	</div>
</div>